package com.dys.testoptional12;

import java.util.Optional;

/**
 * @className: com.dys.testoptional12.OptionalTest01
 * @description: Optional的常用方法
 * @author: pine cone
 * @version: v1.0.0
 * @createTime: 2024/09/02 下午10:42
 */
public class OptionalTest02 {
    /**
     * 这是一个main()方法,是应用程序的入口
     *
     * @param args 方法的形参列表,是一个字符串数组,包含了从命令行传递给程序的参数
     */
    public static void main(String[] args) {
        testOptionalMethod();
    }

    /**
     * Optional中的常用方法介绍
     * get(): 如果Optional有值则返回，否则抛出NoSuchElementException异常
     * get()通常和isPresent方法一块使用
     * isPresent():判断是否包含值，包含值返回true，不包含值返回false
     * orElse(T t):如果调用对象包含值，就返回该值，否则返回t
     * orElseGet(Supplier s):如果调用对象包含值，就返回该值，否则返回 Lambda表达式的返回值
     */
    private static void testOptionalMethod() {
        Optional<String> opt1 = Optional.of("张淑娜");
        Optional<Object> opt2 = Optional.empty();

        // 获取Optional中的值
        if (opt1.isPresent()) {
            String s = opt1.get();
            System.out.println("用户名称：" + s);
        }

        // isPresent
        if (opt2.isPresent()) {
            System.out.println(opt2.get());
        } else {
            System.out.println("opt2是一个空Optional对象");
        }

        // orElse
        String lisi = opt1.orElse("李四");
        System.out.println(lisi);
        Object wangwu = opt2.orElse("王五");
        System.out.println(wangwu);

        // orElseGet
        Object o = opt2.orElseGet(() -> {
            return "返回值";
        });
        System.out.println(o);

    }
}
